home *** CD-ROM | disk | FTP | other *** search
- {
- SEPP MAYER
-
- > Unfortunately I can't cut down on the size of my variables...(well,
- > ok, one of them I did, but it drastically reduces the usefulness of
- > the program itself). So now I got rid of it, but one of my variables
- > is of Array [1..1000] Of String[12]. I'd like to have the array go to
- > 2500. Unfortunately, when I do this, it gives me the error. Is there
- > some way to get around that??
-
- At the Time your Array uses 13000 Byte of Memory in the Data-Segment
- (12 Byte for the 12 characters in the string + 1 Byte for the Length).
-
- The Only Thing You have to do, is to put your Array to the Heap, so you
- can have an Array[1..3250] of your String with the same Use of Memory in
- your Data-Segment.
- }
-
- program BigArray;
-
- type
- PStr12 = ^TStr12;
- tStr12 = String[12];
-
- var
- TheTab : Array[1..3250] of PStr12;
- i : Integer;
-
- function AddTabEle(i : Integer; s : String) : Boolean;
- begin
- if i < 1 then
- begin
- WriteLn('You Used an Index lower than 1');
- AddTabEle := false;
- Exit;
- end;
- if i > 3250 then
- begin
- WriteLn('You Used an Index higher then 3250');
- AddTabEle := false;
- Exit;
- end;
- if TheTab[i] <> nil then
- begin
- WriteLn('TAB Element is already in Use');
- AddTabEle := false;
- Exit;
- end;
- if MemAvail < 13 then
- begin
- WriteLn('Not Enough Heap Memory');
- AddTabEle := false;
- Exit;
- end;
- New[TheTab[i]);
- TheTab[i]^ := Copy(s,1,12); {Limit to 12 Characters}
- AddTabEle := true;
- end;
-
- function ChangeTabEle(i : integer; s : string) : Boolean;
- begin
- if TheTab[i] = nil then
- begin
- WriteLn('You Tried to Modify an non-existing TAB Element, Use AddTabEle');
- ChangeTabEle := false;
- Exit;
- end;
- TheTab[i]^ := Copy(s, 1, 12);
- ChangeTabEle := true;
- end;
-
- function GetTabEle(i : integer) : string;
- begin
- if TheTab[i] = nil then
- begin
- GetTabEle := 'TAB Ele not found'; {No error occurs}
- Exit;
- end;
- s := TheTab[i]^;
- end;
- function FreeTabEle(i : integer) : Boolean;
- begin
- if TheTab[i] = nil then
- begin
- WriteLn('TAB Element is not used';
- FreeTabEle := false;
- Exit;
- end;
- Dispose(TheTab[i]);
- TheTab[i] := nil;
- FreeTabEle := true;
- end;
-
- procedure FreeTab;
- begin
- for i := 1 to 3250 do
- begin
- if TheTab[i] <> nil then
- if NOT FreeTabEle(i) then
- WriteLn('Error releasing Tab element');
- end;
- end;
-
- begin
- for i := 1 to 3250 do {Initialize Pointers with nil, to test }
- TheTab[i] := nil; {if Element is Used, compare pointer with nil}
- {.......} {Your Program}
- if NOT AddTabEle(1, 'Max 12 Chars') then {Add an Ele}
- WriteLn('Error creating TAB element'); {evtl. use FreeMem + Halt(1)}
- {to terminate Programm}
- WriteLn(GetTabEle(1)); {Write an Tab Ele}
- if NOT ChangeTabEle(1, '12 Chars Max') then {Change an Ele}
- WriteLn('Error changing TAB element'); {evtl. use FreeMem + Halt(1)}
- {to terminate Programm}
- WriteLn(GetTabEle(1)); {Write an Tab Ele}
- if NOT FreeTabEle(1) then {Delete(Free) an Ele}
- WriteLn('Error releasing Tab element'); {evtl. use FreeMem + Halt(1)}
- {to terminate Programm}
- {.......} {Your Program}
- FreeTab; {At The End of Your Program free all TAB Ele}
- end.
-